﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlexFlow.Model
{
    /// <summary>
    /// 表示工作流任务的状态
    /// </summary>
    public enum WorkFlowTaskState
    {
        /// <summary>
        /// 表示任务已创建，尚未被打开过
        /// </summary>
        Created,
        /// <summary>
        /// 表示任务已被打开，但未被处理
        /// </summary>
        Opened,
        /// <summary>
        /// 表示任务已被关闭
        /// </summary>
        Closed,
        /// <summary>
        /// 表示任务已被处理
        /// </summary>
        Processed,
        /// <summary>
        /// 表示任务已被重定向
        /// </summary>
        Redirected
    }
    /// <summary>
    /// 表示系统任务类型定义
    /// </summary>
    public static class SystemTaskType
    {
        /// <summary>
        /// 审批任务
        /// </summary>
        public const string ApprovalTask = "审批任务";
        /// <summary>
        /// 表单提交任务
        /// </summary>
        public const string FormSubmitTask = "表单提交任务";
    }
    /// <summary>
    /// 表示系统任务数据的键
    /// </summary>
    public static class SystemTaskDataKey
    {
        /// <summary>
        /// 表示用户表单的ID
        /// </summary>
        public const string UserFormId = "UserFormId";
        /// <summary>
        /// 表示是否需要签署意见
        /// </summary>
        public const string NeedSignOption = "NeedSignOption";
        /// <summary>
        /// 表示是否需要表单
        /// </summary>
        public const string TaskFormId = "TaskFormId";
        /// <summary>
        /// 表示附加按钮
        /// </summary>
        public const string ExtendButton = "ExtendButton";
    }
    /// <summary>
    /// 表示一个工作流任务，任务为工作流执行的基本单位，用来存储执行的流程信息
    /// </summary>
    public sealed class WorkFlowTask : PhysicalModel
    {
        /// <summary>
        /// 表示当前任务的任务类型
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 表示当前任务正在执行的流程标识符
        /// </summary>
        public Guid CurrentProcess { get; set; }
        /// <summary>
        /// 表示当前任务正在执行的流程实例标识符
        /// </summary>
        public Guid CurrentProcessInstance { get; set; }
        /// <summary>
        /// 表示当前任务正在执行的流程的标识符
        /// </summary>
        public Guid CurrentActivity { get; set; }
        /// <summary>
        /// 表示当前任务正在执行的活动实例的标识符
        /// </summary>
        public Guid CurrentActivityInstance { get; set; }
        /// <summary>
        /// 表示当前任务所在的步骤Id
        /// </summary>
        public Guid CurrentSetpId { get; set; }
        /// <summary>
        /// 表示当前任务的发起人Id
        /// </summary>
        public Guid Sender { get; set; }
        /// <summary>
        /// 表示当前任务的打开人员
        /// </summary>
        public Guid Opener { get; set; }
        /// <summary>
        /// 表示当前任务的发起时间
        /// </summary>
        public DateTime SendTime { get; set; }
        /// <summary>
        /// 表示当前任务的完成时间
        /// </summary>
        public DateTime CompeletedTime { get; set; }
        /// <summary>
        /// 表示当前任务的处理人(以,隔开的Guid集合)
        /// </summary>
        public string Reciver { get; set; }
        /// <summary>
        /// 表示当前任务的状态
        /// </summary>
        public WorkFlowTaskState State { get; set; }
        /// <summary>
        /// 表示当前任务的状态消息
        /// </summary>
        public string Message { get; set; }
        /// <summary>
        /// 表示任务发送时的附加数据
        /// </summary>
        public Dictionary<string,Object> SendData { get; set; }
        /// <summary>
        /// 表示任务提交时的附加数据
        /// </summary>
        public Dictionary<string,Object> SubmitData { get; set; }

        public WorkFlowTask()
        {
            this.SubmitData = new Dictionary<string, object>();
            this.SendData = new Dictionary<string, object>();
        }
    }
}
